/*****************************************************************************
* File Name: watch_dog_timer.c
*
* Version: 1.0
*
* Description:
* This file contains API functions for configuring and clearing the Watch dog timer
*
* Note:
* Defining DISABLE_WATCH_DOG in platform.h to disable watch dog timer module
*
* Owner: MRAO
*
* Related Document:
* System Reference Guide
*
* Hardware Dependency:
* 
*
* Code Tested With:
* 1. PSoC Creator 3.1 
* 2. ARM GCC 4.8.4
******************************************************************************
* Copyright (2015), Cypress Semiconductor Corporation.
******************************************************************************
* This software is owned by Cypress Semiconductor Corporation (Cypress) and is
* protected by and subject to worldwide patent protection (United States and
* foreign), United States copyright laws and international treaty provisions.
* Cypress hereby grants to licensee a personal, non-exclusive, non-transferable
* license to copy, use, modify, create derivative works of, and compile the
* Cypress Source Code and derivative works for the sole purpose of creating
* custom software in support of licensee product to be used only in conjunction
* with a Cypress integrated circuit as specified in the applicable agreement.
* Any reproduction, modification, translation, compilation, or representation of
* this software except as specified above is prohibited without the express
* written permission of Cypress.
*
* Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
* REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 
* Cypress reserves the right to make changes without further notice to the
* materials described herein. Cypress does not assume any liability arising out
* of the application or use of any product or circuit described herein. Cypress
* does not authorize its products for use as critical components in life-support
* systems where a malfunction or failure may reasonably be expected to result in
* significant injury to the user. The inclusion of Cypress' product in a life-
* support systems application implies that the manufacturer assumes all risk of
* such use and in doing so indemnifies Cypress against all charges. Use may be
* limited by and subject to the applicable Cypress software license agreement.
*****************************************************************************/

#include "watch_dog_timer.h"
#include "debug.h"

#ifndef DISABLE_WATCH_DOG
/*****************************************************************************
* Function Name: Watch_Dog_Timer_Init()
******************************************************************************
* Summary:
* This function initializes the watch dog timer
*
* Parameters:
* uint32 counter0Value - counter0 number value
*
* Return:
* None
*
* Theory:
* WDT is uses the ILO Clock for Counting Set. WDT is resets the firmware when both the counter expires
*
* Side Effects:
* None
* 
* Note:
* None
*****************************************************************************/
void Watch_Dog_Timer_Init(uint32 counter0Value)
{
    CySysWdtUnlock();
    /* Changing the WDT clock to WCO for this Application */
    CySysWdtWriteMode(CY_SYS_WDT_COUNTER0, CY_SYS_WDT_MODE_INT_RESET);
    CySysWdtWriteMatch(CY_SYS_WDT_COUNTER0, counter0Value);
    CySysWdtWriteClearOnMatch(CY_SYS_WDT_COUNTER0, 1u);

    /* Enable WDT counters 0 and 1 */
    CySysWdtEnable(CY_SYS_WDT_COUNTER0_MASK);
    CySysWdtLock();
}

/*****************************************************************************
* Function Name: Watch_Dog_Timer_Clear()
******************************************************************************
* Summary:
* This function clears the watch dog timer
*
* Parameters:
* None
*
* Return:
* None
*
* Theory:
* None
*
* Side Effects:
* None
* 
* Note:
* None
*****************************************************************************/
void Watch_Dog_Timer_Clear(void)
{
    CySysWdtUnlock();
    CySysWdtResetCounters(CY_SYS_WDT_COUNTER0_RESET);
    CySysWdtLock();
}

/*****************************************************************************
* Function Name: Watch_Dog_Timer_Disable()
******************************************************************************
* Summary:
* This function disables the watch dog timer
*
* Parameters:
* None
*
* Return:
* None
*
* Theory:
* None
*
* Side Effects:
* None
* 
* Note:
* None
*****************************************************************************/
void Watch_Dog_Timer_Disable(void)
{
    CySysWdtUnlock();
    CySysWdtDisable(CY_SYS_WDT_COUNTER0_MASK);
    CySysWdtLock();
}

/*****************************************************************************
* Function Name: Watch_Dog_Timer_Enable()
******************************************************************************
* Summary:
* This function enables the watch dog timer
*
* Parameters:
* None
*
* Return:
* None
*
* Theory:
* None
*
* Side Effects:
* None
* 
* Note:
* None
*****************************************************************************/
void Watch_Dog_Timer_Enable(void)
{
    CySysWdtUnlock();
    CySysWdtEnable(CY_SYS_WDT_COUNTER0_MASK);
    CySysWdtLock();
}

#endif /* DISABLE_WATCH_DOG */
